package bdcin.servlet.actions.tese;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.DiskFileUpload;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUpload;

import bdcin.classesbasicas.Area;
import bdcin.classesbasicas.DocenteUtilizado;
import bdcin.classesbasicas.Tese;
import bdcin.excecoes.BuscarException;
import bdcin.excecoes.EditarException;
import bdcin.fachada.BDCInFactory;
import bdcin.fachada.IBDCIn;
import bdcin.servlet.actions.Action;

@SuppressWarnings("deprecation")
public class AtualizarTeseAction extends Action {

	@SuppressWarnings("unchecked")
	@Override
	public void executar(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		IBDCIn facade = BDCInFactory.getFacade();
		boolean isMultipart = FileUpload.isMultipartContent(request);

		List items = null;
		if (isMultipart) {  

			DiskFileUpload upload = new DiskFileUpload();

			try {
				items = upload.parseRequest(request);
			} catch (Exception e) {

				System.out.println("FUDEUUUUUUUUU");
			}
			upload.setSizeMax(50*1024*1024);
			upload.setRepositoryPath("c:/temp");
		}	

		String titulo = "";
		String autor = "";
		String area = "";
		String subarea = "";
		String data = "";
		String orientador = "";
		String coorientador = "";
		String avaliador1 = "";
		String avaliador2 = "";
		String avaliador3 = "";
		String avaliador4 = "";
		String instituicao4 = "";
		String avaliador5 = "";
		String instituicao5 = "";
		String resumo = "";
		String id = request.getParameter("id");
		Long idl = Long.valueOf(id);

		Tese tese=null;
		try {
			tese = (Tese) facade.buscarDocumento(idl);
		} catch (BuscarException e) {
			request.setAttribute("mensagem", e.getMessage());
			request.getRequestDispatcher("mensagem.jsp").forward(request, response);
		}

		if(items != null){
			titulo = ((FileItem) items.get(0)).getString();
			autor = ((FileItem) items.get(1)).getString();
			area = ((FileItem) items.get(2)).getString();
			subarea = ((FileItem) items.get(3)).getString();
			data = ((FileItem) items.get(4)).getString();
			orientador = ((FileItem) items.get(5)).getString();
			coorientador = ((FileItem) items.get(6)).getString();
			avaliador1 = ((FileItem) items.get(7)).getString();
			avaliador2 = ((FileItem) items.get(8)).getString();
			avaliador3 = ((FileItem) items.get(9)).getString();
			avaliador4 = ((FileItem) items.get(10)).getString();
			instituicao4 = ((FileItem) items.get(11)).getString();
			avaliador5 = ((FileItem) items.get(12)).getString();
			instituicao5 = ((FileItem) items.get(13)).getString();
			resumo = ((FileItem) items.get(14)).getString();
		}


		Area areaObj=null;
		try {
			areaObj = facade.buscarArea(Long.valueOf(area));

		} catch (BuscarException e) {
			request.setAttribute("mensagem", e.getMessage());
			request.getRequestDispatcher("mensagem.jsp").forward(request, response);
		}

		DocenteUtilizado orientadorObj = null;
		try {
			orientadorObj = facade.buscaDocenteUtilizadoPorDocente(Long.valueOf(orientador));
		} catch (BuscarException e1) {
			request.setAttribute("mensagem", e1.getMessage());
			request.getRequestDispatcher("mensagem.jsp").forward(request, response);
		}		
		DocenteUtilizado coorientadorObj = null;
		try {
			coorientadorObj = facade.buscaDocenteUtilizadoPorDocente(Long.valueOf(coorientador));
		} catch (NumberFormatException e1) {
			request.setAttribute("mensagem", e1.getMessage());
			request.getRequestDispatcher("mensagem.jsp").forward(request, response);
		} catch (BuscarException e1) {
			request.setAttribute("mensagem", e1.getMessage());
			request.getRequestDispatcher("mensagem.jsp").forward(request, response);
		}
		DocenteUtilizado avaliadorObj1 = null;
		try {
			avaliadorObj1 = facade.buscaDocenteUtilizadoPorDocente(Long.valueOf(avaliador1));
		} catch (NumberFormatException e1) {
			request.setAttribute("mensagem", e1.getMessage());
			request.getRequestDispatcher("mensagem.jsp").forward(request, response);
		} catch (BuscarException e1) {
			request.setAttribute("mensagem", e1.getMessage());
			request.getRequestDispatcher("mensagem.jsp").forward(request, response);
		}		
		DocenteUtilizado avaliadorObj2 = null;
		try {
			avaliadorObj2 = facade.buscaDocenteUtilizadoPorDocente(Long.valueOf(avaliador2));
		} catch (NumberFormatException e1) {
			request.setAttribute("mensagem", e1.getMessage());
			request.getRequestDispatcher("mensagem.jsp").forward(request, response);
		} catch (BuscarException e1) {
			request.setAttribute("mensagem", e1.getMessage());
			request.getRequestDispatcher("mensagem.jsp").forward(request, response);
		}
		DocenteUtilizado avaliadorObj3 = null;
		try {
			avaliadorObj3 = facade.buscaDocenteUtilizadoPorDocente(Long.valueOf(avaliador3));
		} catch (NumberFormatException e1) {
			request.setAttribute("mensagem", e1.getMessage());
			request.getRequestDispatcher("mensagem.jsp").forward(request, response);
		} catch (BuscarException e1) {
			request.setAttribute("mensagem", e1.getMessage());
			request.getRequestDispatcher("mensagem.jsp").forward(request, response);
		}


		tese.setTitulo(titulo);
		tese.setAluno(autor);		
		tese.setArea(areaObj);
		tese.setAno(data);
		tese.setSubArea(subarea);		
		tese.setOrientador(orientadorObj);
		tese.setCoOrientador(coorientadorObj);
		tese.setAvaliador1(avaliadorObj1);
		tese.setAvaliador2(avaliadorObj2);
		tese.setAvaliador3(avaliadorObj3);
		tese.setNomeAvaliador4(avaliador4);
		tese.setInstituicaoAvaliador4(instituicao4);
		tese.setNomeAvaliador5(avaliador5);
		tese.setInstituicaoAvaliador5(instituicao5);
		tese.setResumo(resumo);

		byte[] temp = ((FileItem) items.get(15)).get();

		//seta o arquivo apenas se ele foi informado
		if( (temp != null) && (temp.length != 0) ){

			tese.setArquivo(temp);

		}

		try {
			facade.atualizarDocumento(tese);
		} catch (EditarException e) {
			request.setAttribute("mensagem", e.getMessage());
			request.getRequestDispatcher("mensagem.jsp").forward(request, response);
		}
		request.setAttribute("mensagem", "Tese alterada com sucesso!");
		request.getRequestDispatcher("mensagem.jsp").forward(request, response);	
	}	
}
